package com.locatme.modelBD;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;

import com.locatme.model.Langue;


public class LangueBD extends GestionBD {

    public LangueBD(Context context) {
        super(context);
    }



    /**
     * recupIdLangue : retourne l'id de la langue passe en parametre
     *
     * @param langue
     *            ; String
     * @return id de la langue demande
     */
    public int recupIdLangue(String langue) {
        // Requete
        Cursor c = db.rawQuery("SELECT " + BdLocatme.COL_ID_LANGUE + " FROM "
                + BdLocatme.TABLE_LANGUE + " WHERE " + BdLocatme.COL_NOM_LANGUE
                + "= ?", new String[] { langue });

        // S'il n'y a pas de rsultat
        if (c.getCount() == 0){
            c.close();
            return 1;
        }

        c.moveToFirst();
        int idLangue = c.getInt(0);
        c.close();
        return idLangue;
    }

    /**
     * insererLanguePersonne : Ajoute une langue  la personne passe en
     * parametre
     *
     * @param login
     * @param idLangue
     * @return long : -1 si la requte ne s'est pas bien droule
     */
    public long insererLanguePersonne(String login, int idLangue) {

        ContentValues values = new ContentValues();

        values.put(BdLocatme.COL_LOGIN_PERSONNE_LP, login);
        values.put(BdLocatme.COL_ID_LANGUE_LU, idLangue);

        return db.insert(BdLocatme.TABLE_LANGUE_PERSONNE, null, values);
    }

    /**
     * insererLangueEnseigne : Ajoute une langue  l'enseigne passe en
     * parametre
     *
     * @param login
     * @param idLangue
     * @return long : -1 si la requte ne s'est pas bien droule
     */
    public long insererLangueEnseigne(String login, int idLangue) {

        ContentValues values = new ContentValues();

        values.put(BdLocatme.COL_LOGIN_ENSEIGNE_LE, login);
        values.put(BdLocatme.COL_ID_LANGUE_LE, idLangue);

        return db.insert(BdLocatme.TABLE_LANGUE_ENSEIGNE, null, values);
    }



    /**
     * getLanguageByPersonne : rcupre les langues d'une personne
     *
     * @param login
     * @return ArrayList de langue
     */
    public ArrayList<Langue> getLanguageByPersonne(String login) {
        Cursor c = null;

        //Requete
        c = db.rawQuery("SELECT " + BdLocatme.TABLE_LANGUE + "."
                + BdLocatme.COL_NOM_LANGUE + " FROM "
                + BdLocatme.TABLE_PERSONNE + ", " + BdLocatme.TABLE_LANGUE
                + ", " + BdLocatme.TABLE_LANGUE_PERSONNE + " WHERE "
                + BdLocatme.TABLE_LANGUE_PERSONNE + "."
                + BdLocatme.COL_ID_LANGUE + "= " + BdLocatme.TABLE_LANGUE + "."
                + BdLocatme.COL_ID_LANGUE_LU + " AND "
                + BdLocatme.TABLE_LANGUE_PERSONNE + "."
                + BdLocatme.COL_LOGIN_PERSONNE_LP + "= "
                + BdLocatme.TABLE_PERSONNE + "." + BdLocatme.COL_LOGIN_PERSONNE
                + " AND " + BdLocatme.TABLE_PERSONNE + "."
                + BdLocatme.COL_LOGIN_PERSONNE + "= ?", new String[] { login });

        return CursorToLangues(c);
    }

    /**
     * getLanguageByEnseigne : rcupre les langues d'une enseigne
     *
     * @param login
     * @return ArrayList de langue
     */
    public ArrayList<Langue> getLanguageByEnseigne(String login) {
        Cursor c = null;

        //Requete
        c = db.rawQuery("SELECT " + BdLocatme.TABLE_LANGUE + "."
                + BdLocatme.COL_NOM_LANGUE + " FROM "
                + BdLocatme.TABLE_ENSEIGNE + ", " + BdLocatme.TABLE_LANGUE
                + ", " + BdLocatme.TABLE_LANGUE_ENSEIGNE + " WHERE "
                + BdLocatme.TABLE_LANGUE_ENSEIGNE + "."
                + BdLocatme.COL_ID_LANGUE + "= " + BdLocatme.TABLE_LANGUE + "."
                + BdLocatme.COL_ID_LANGUE_LE + " AND "
                + BdLocatme.TABLE_LANGUE_ENSEIGNE + "."
                + BdLocatme.COL_LOGIN_ENSEIGNE_LE + "= "
                + BdLocatme.TABLE_ENSEIGNE + "." + BdLocatme.COL_LOGIN_ENSEIGNE
                + " AND " + BdLocatme.TABLE_ENSEIGNE + "."
                + BdLocatme.COL_LOGIN_ENSEIGNE + "= ?", new String[] { login });

        return CursorToLangues(c);
    }

    /**
     * Methode qui parcours le curseur donn en paramtre et rempli une array
     * list de langue.
     *
     * @param c
     * @return ArrayList de langues
     */
    private ArrayList<Langue> CursorToLangues(Cursor c) {
        //Declaration variable
        List<Langue> langues = new ArrayList<Langue>();
        Langue langue;
        String nom;

        //si le curseur est vide
        if (c.getCount() == 0){
            c.close();
            return null;
        }

        c.moveToFirst();
        //Parcours du curseur pour creer la lange et l'ajouter  la liste
        while (!c.isAfterLast()) {
            nom = c.getString(0);
            langue = new Langue(nom);
            langues.add(langue);
            c.moveToNext();
        }
        c.close();
        return (ArrayList<Langue>) langues;
    }

}
